by Débora Azevedo, Eliseu Jayro, Francisco de Paiva and Igor Brandão
Goals The purpose of this project is explore the following:
Como vimos no notebook “How long can you run”, o nosso amigo Ivano Vitch é um atleta exemplar que se preparou intensamente para a maratona de competições em sua cidade. Mas no decorrer de suas provas ele percebeu que existem fatores climáticos que influenciam direta ou indiretamente no seu treinamento. Agora o Ivano está focado em analisar o fator que mais impactou no seu desempenho durante as modalidades de exercícios que envolviam grandes deslocamentos na sua cidade; chamado: Vento. Esse fator é responsável por favorecer ou desfavorecer os resultados dos treinos dependendo se o seu sentido e velocidade estão a favor ou contra a trajetória tomada pelo atleta. Agora seguiremos analisando como poderemos ajudar o nosso amigo Vitsh a otimizar ainda mais os seus treinos e mostra-lo como ele poderá utilizar as informações da direção do vento na sua cidade para ampliar suas estratégias de treinamentos.
Mesmo em uma rota relativamente montanhosa, a resistência do ar tem um efeito maior na velocidade geral do ciclismo do que o peso / resistência gravitacional. Quanto mais rápido o ciclista vai, mais resistência ao vento ele experimenta, e mais energia ele deve exercer para superá-lo.
os resultados obtidos poderão ser divididos nas seguintes escalas de vento:
Import the necessary libraries to handle
### Library necessary to run this IPython Notebook
!pip install geocoder
!pip install folium
!pip install tqdm
!pip install tabulate
!pip install pandas-datareader
!pip install requests
# Import pandas
import pandas as pd
# Import json
import json
# Import google geocoder
import geocoder as gc
# Import numpy library
import numpy as np
# Import folium maps
import os
import folium
from folium import plugins
# Import tqdm progressing bar plugin
from tqdm import tqdm
# Import the geolocation.csv data: data
geolocation_data = pd.read_csv("geolocation.csv", encoding = 'latin2')
The cell below perform the latitude/longitude reading and count all og them to know if there are repetitions and group [latitude, longitude, count] data into the coordinate array
# =================================================================================
# Data adjusts
# =================================================================================
# Count the same latitude/longitude occurrences
geodata = geolocation_data.groupby(['longitude', 'latitude']).size().reset_index().rename(columns={0:'count'})
# =================================================================================
# Add the coordinates
# =================================================================================
# Initialize the coordinates array
coordinates = []
# Add the coordinates to the coordinate
for i in tqdm(range(len(geodata))):
# eliminate items with'nan' element
if all(~np.isnan([geodata.loc[geodata.index[i],'latitude'], geodata.loc[geodata.index[i],'longitude']])):
coordinates.append([geodata.loc[geodata.index[i],'latitude'], geodata.loc[geodata.index[i],'longitude'],
geodata.loc[geodata.index[i],'count']])
# Display the imported coordinates
coordinates
# =================================================================================
# Map settings
# =================================================================================
# Set map center and zoom level
mapc = [-5.788, -35.202]
zoom = 11
# Wind rose
url = ('https://raw.githubusercontent.com/SECOORA/static_assets/'
'master/maps/img/rose.png')
# Create HeatMap instance
htMap = folium.Map(location=mapc, zoom_start=zoom, tiles='OpenStreetMap', control_scale=True)
htMap2 = folium.Map(location=mapc, zoom_start=zoom, tiles='OpenStreetMap', control_scale=True)
# Create marker map instance
mkMap = folium.Map(location=mapc, zoom_start=zoom, tiles='OpenStreetMap', control_scale=True)
# Create circle marker map instance
circMap = folium.Map(location=mapc, zoom_start=zoom, tiles='OpenStreetMap', control_scale=True)
# Chunk size
chunksize = 10 ** 3 # can be changed
# For item i in a range that is a length of l,
for i in tqdm(range(0, len(coordinates), chunksize)):
# Append the coordinates to the Heat Map
plugins.HeatMap(coordinates[i:i+chunksize]).add_to(htMap)
plugins.FloatImage(url, bottom=5, left=75).add_to(htMap)
plugins.HeatMap(coordinates[i:i+chunksize]).add_to(htMap2)
plugins.FloatImage(url, bottom=5, left=75).add_to(htMap2)
# Append the coordinates to Marker Map
plugins.MarkerCluster(coordinates[i:i+chunksize]).add_to(mkMap)
plugins.FloatImage(url, bottom=5, left=75).add_to(mkMap)
# print the map
htMap
# print the map
mkMap